import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
import * as TodoAPI from '@/api/todos'
import type { ToDo, Page, Result } from '../types'

export const useTodoStore = defineStore('todo', () => {
  const todos = ref<ToDo[]>([])

  // 分页请求
  const getTodos = (payload: Page) => {
    TodoAPI.getTodos<Result<ToDo[]>>(payload.page, payload.size).then((res) => {
      if (payload.page === 1) {
        todos.value = [...res.data]
      } else {
        todos.value.push(...res.data)
      }
    })
  }

  // 搜索
  const searchTodos = (payload: string) => {
    TodoAPI.getTodoListByContent<Result<ToDo[]>>(payload).then((res) => {
      todos.value = [...res.data]
    })
  }
  // 添加
  const addTodo = (payload: ToDo) => {
    return TodoAPI.addTodo<Result<ToDo>>(payload).then((res) => {
      todos.value.push(res.data)
    })
  }
  // 修改
  const updateTodo = (payload: any) => {
    return TodoAPI.updateTodo(payload.id, payload.todo).then(() => {
      todos.value.forEach((note: ToDo) => {
        if (note._id === payload.id) {
          note.content = payload.todo.content
          note.isdone = payload.todo.isdone
        }
      })
    })
  }
  // 删除
  const deleteTodo = (payload: string) => {
    TodoAPI.deleteTodo(payload).then(() => {
      const index = todos.value.findIndex((note: ToDo) => {
        return note._id === payload
      })
      todos.value.splice(index, 1)
    })
  }
  return { todos, getTodos, searchTodos, addTodo, updateTodo, deleteTodo }
})
